package cn.s1995.sloth.bizs.service;

import java.util.List;
import java.util.Set;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import cn.s1995.sloth.bizs.entity.Video;
import cn.s1995.sloth.bizs.oo.vo.VideoVO;
import cn.s1995.sloth.common.core.util.R;

public interface VideoService extends IService<Video> {

	/**
	 * 新增视频及关联产品
	 * @param video
	 * @return
	 */
	boolean saveVideoAndRecommend(Video video);

	/**
	 * 查询视频及相关推荐
	 * @param id
	 * @return
	 */
	Video getVideoAndRecommend(Long id);

	/**
	 * 随机获取视频
	 * @param count
	 * @return
	 */
	List<Video> getRandomList(Integer count);

	/**
	 * 更新缓存数
	 * @param id
	 * @param count
	 * @param action 参考BizCst.UserLike.Action，另外 10：播放 11：评论
	 * @return
	 */
	Video updateCache(Long id, int count, int action);

	/**
	 * 同步缓存到数据库
	 * @param id
	 * @return
	 */
	Video syncCacheToDB(Long id);

	/**
	 * 删除视频缓存
	 * @param id
	 */
	void removeCache(Long id);

	/**
	 * 播放视频
	 * @param id
	 * @return
	 */
	R play(Long id);

	/**
	 * 分享视频
	 * @param id
	 * @return
	 */
	R share(Long id);

	/**
	 * 点赞视频
	 * @param id
	 * @return
	 */
	R like(Long id);

	/**
	 * 获取视频的点赞用户集合
	 * @param id
	 * @return
	 */
	Set<Long> getLikeUserSet(Long id);

	/**
	 * 更新视频的点赞用户集合
	 * @param vedioId
	 * @param set
	 * @return
	 */
	Set<Long> updateLikeUserSet(Long id, Set<Long> set);

	/**
	 * 查询用户对视频的各种操作的状态
	 * @param uid
	 * @param video
	 */
	VideoVO setStatus(Long uid, Video video);

	/**
	 * 查询用户对视频的各种操作的状态
	 * @param uid
	 * @param video
	 */
	List<VideoVO> setStatus(Long uid, List<Video> list);

	/**
	 * 收藏视频
	 * @param id
	 * @return
	 */
	R collect(Long id);

	/**
	 * 获取视频的收藏用户集合
	 * @param id
	 * @return
	 */
	Set<Long> getCollectUserSet(Long id);

	/**
	 * 更新视频的收藏用户集合
	 * @param vedioId
	 * @param set
	 * @return
	 */
	Set<Long> updateCollectUserSet(Long id, Set<Long> collectUserSet);

	/**
	 * 获取关注店铺或用户的视频
	 * @param page
	 * @return
	 */
	Page<Video> getFollowPage(Page page);


}
